/*
 * @Author: youngqj youngqj@126.com
 * @Date: 2024-12-03 11:52:28
 * @LastEditors: youngqj youngqj@126.com
 * @LastEditTime: 2024-12-03 14:24:25
 * @FilePath: /mallSystem/core/utils/datetimex.go
 * @Description:自定义datetime 工具包
 *
 * Copyright © Zhejiang Xiaoqu Information Technology Co., Ltd, All Rights Reserved.
 */
package utils

import (
	"fmt"
	"time"
)

// DateToTimestamp 将日期时间字符串转换为时间戳
// format 是日期时间的格式，如 "2006-01-02 15:04:05 -0700 MST"
func DateToTimestamp(dateStr string, format string) (int64, error) {
	// 使用给定的格式解析日期字符串
	parsedTime, err := time.Parse(format, dateStr)
	if err != nil {
		return 0, fmt.Errorf("无法解析日期字符串: %v", err)
	}
	// 返回时间戳（秒级）
	return parsedTime.Unix(), nil
}

// TimestampToDate 将时间戳转换为带时区的日期时间字符串
// format 是输出的日期时间格式，如 "2006-01-02 15:04:05 -0700 MST"
func TimestampToDate(timestamp int64, format string) string {
	// 将时间戳转换为 time.Time 类型
	t := time.Unix(timestamp, 0)
	// 返回格式化后的日期时间字符串
	return t.Format(format)
}

func TestDemo() {
	// 假设 claims.ExpiresAt 是一个 time.Time 类型
	claimsExpiresAt := time.Date(2024, time.December, 3, 16, 5, 9, 0, time.FixedZone("CST", 8*60*60)) // 示例时间

	// 获取 claims.ExpiresAt 的时间戳
	timestamp := claimsExpiresAt.Unix() // 获取 UNIX 时间戳
	fmt.Printf("时间戳: %d\n", timestamp)

	// 使用 TimestampToDate 将时间戳转换为带时区的日期时间字符串
	format := "2006-01-02 15:04:05 -0700 MST"
	dateStr := TimestampToDate(timestamp, format)
	fmt.Printf("时间戳对应的日期时间: %s\n", dateStr)

	// 如果需要使用 DateToTimestamp 将日期时间字符串转换为时间戳
	dateTimeStr := claimsExpiresAt.String() // 直接使用 claims.ExpiresAt 的字符串格式
	timestampFromStr, err := DateToTimestamp(dateTimeStr, format)
	if err != nil {
		fmt.Println("错误:", err)
		return
	}
	fmt.Printf("通过字符串 '%s' 转换的时间戳: %d\n", dateTimeStr, timestampFromStr)
}
